//
//  Problem203.swift
//  TestProject
//
//  Created by 武侠 on 2021/5/25.
//  Copyright © 2021 zhulong. All rights reserved.
//

import UIKit

/*
 203. 移除链表元素
 给你一个链表的头节点 head 和一个整数 val ，请你删除链表中所有满足 Node.val == val 的节点，并返回 新的头节点 。

 示例 1：
     输入：head = [1,2,6,3,4,5,6], val = 6
     输出：[1,2,3,4,5]
 示例 2：
     输入：head = [], val = 1
     输出：[]
 示例 3：
     输入：head = [7,7,7,7], val = 7
     输出：[]
 提示：
     列表中的节点在范围 [0, 104] 内
     1 <= Node.val <= 50
     0 <= k <= 50
 */
@objcMembers class Problem203: NSObject {
    func solution() {
        let head = ListNode(6)
        head.next = ListNode(2)
        head.next?.next = ListNode(6)
        head.next?.next?.next = ListNode(3)
        head.next?.next?.next?.next = ListNode(4)
        head.next?.next?.next?.next?.next = ListNode(5)
        head.next?.next?.next?.next?.next?.next = ListNode(6)
        
        print(printNode(removeElements(head, 6)))
    }
    
    func removeElements(_ head: ListNode?, _ val: Int) -> ListNode? {
        var pHead = head
        while pHead != nil, pHead?.val == val {
            pHead = pHead?.next
        }
        if pHead == nil {
            return nil
        }
        var pre  = pHead
        var node = pHead?.next
        while node != nil {
            if node?.val == val {
                pre?.next = node?.next
            } else {
                pre = node
            }
            node = node?.next
        }
        
        return pHead
    }
}
